import { Transform } from "class-transformer";
import { Allow, IsEnum, IsIn, IsNumber } from "class-validator";
import { MenuTypeEnum } from "src/common/enums/menu.enum";
import { isNumberString } from "src/common/utils";


/**
 * 菜单表单对象类型
 */
export class CreateMenuDto {
    /**
     * 菜单ID
     */
    @Allow()
    id?: string;
    /**
     * 父菜单ID
     */
    @Allow()
    parentId?: number;
    /**
     * 菜单名称
     */
    @Allow()
    name?: string;
    /**
     * 菜单是否可见(1:是;0:否;)
     */
    @IsIn([0, 1], { message: '菜单是否可见参数不正确' })
    visible: number;

    @Allow()
    icon?: string;
    /**
     * 排序
     */
    @IsNumber()
    sort: number;

    /**
     * 组件路径
     */
    @Allow()
    component?: string;

    /**
     * 路由路径
     */
    @Allow()
    path?: string;

    /**
     * 跳转路由路径
     */
    @Allow()
    redirect?: string;

    /**
     * 菜单类型
     */
    @Transform((value)=>{
        //转成number类型
        if (isNumberString(value)) {
            return +value
        }
        return value
    })
    @IsEnum(MenuTypeEnum)
    type: MenuTypeEnum;

    /**
     * 权限标识
     */
    @Allow()
    perm?: string;
    /**
     * 【菜单】是否开启页面缓存
     */
    @Allow()
    keepAlive?: number;

    /**
     * 【目录】只有一个子路由是否始终显示
     */
    @Allow()
    alwaysShow?: number;
}